#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <stdint.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <stdbool.h>
#include <errno.h>
#include <string.h>
#include <signal.h>
#include <dlfcn.h>
#include <pthread.h>
#include <linux/fb.h>

// 扩展响应函数
void handler(int sig, siginfo_t *info, void *arg)
{
    printf("当前的乘客数：%d\n", info->si_int);
}

int main(int argc, char const *argv[])
{
    // 1，创建通信具名管道
    mkfifo("BPID", 0666);
    int fifo = open("BPID", O_RDWR);

    // 2, 告诉对方我的PID
    pid_t PID = getpid();
    write(fifo, &PID, sizeof(PID));

    // 3, 注册SIGUSR1的响应处理函数
    struct sigaction act;
    bzero(&act, sizeof(act));
    act.sa_sigaction = handler;
    act.sa_flags    |= SA_SIGINFO;
    sigfillset(&act.sa_mask);       // 确保在响应SIGUSR1期间屏蔽其他信号
    sigaction(SIGUSR1, &act, NULL); // 将SIGUSR1与函数handler关联

    while(1)
    {
        // pause的功能：暂停，直到遇到致命信号，或者从信号响应函数返回
        // 因此需要将其放入while(1)中确保一直不退出
        pause();
    }

    return 0;
}
